Instrucțiunile SQL ANY și ALL vă permit să efectuați comparații între valoarea unei coloane și un interval de alte valori.
operator ANY:
ANY înseamnă că condiția va fi adevărată dacă operația este adevărată pentru oricare dintre valorile din interval.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
Operator ALL:
ALL înseamnă că condiția va fi adevărată numai dacă operația este adevărată pentru toate valorile din interval.
SELECT ALL column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition)
Următorul este un exemplu din tabelul „Products” („Produse”) din baza de date „Northwind”:
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25.00 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30.00 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40.00 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97.00 |
10 | Ikura | 4 | 8 | 12 - 200 ml jars | 31.00 |
Și eșantionul din tabelul „OrderDetails” („Detalii comandă”):
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
Următoarea interogare SQL listează ProductName dacă găsește orice înregistrare (ANY) în tabelul OrderDetails cu o valoare Quantity egală cu 10 (aceasta va returna TRUE deoarece Quantity din coloana are o valoare 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
Următoarea interogare SQL listează ProductName dacă găsește orice înregistrare (ANY) în tabelul OrderDetails cu o cantitate mai mare de 99 (aceasta va returna TRUE deoarece coloana Quantity conține unele valori mai mari decât 99):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
O altă instrucțiune SQL listează ProductName dacă găsește vreo înregistrare (ANY) în tabelul OrderDetails cu o cantitate mai mare de 1000 (aceasta va returna FALSE deoarece coloana Quantity nu conține valori mai mari decât 10000):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
Următoarea instrucțiune SQL listează toate numele de produse (ALL):
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
Următoarea instrucțiune SQL listează ProductName dacă toate înregistrările (ALL) din tabelul OrderDetails au un număr egal cu 10. Desigur, aceasta va returna FALSE deoarece coloana Quantity are multe valori diferite (nu doar valoarea 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)